rm(list = ls(all = TRUE)) #clear workspace
setwd("~/Dropbox/REDISTRICTING/DISTRITACION 97-06")

## -----------------
## Distritacion 2006
## -----------------
data06 <- read.table("DIPUTADOS_2006.txt", head=TRUE, sep="\t")
data06 <- data06[, c("ENTIDAD.FEDERATIVA","DISTRITO","PAN","ALIANZA.POR.MÉXICO",
                     "POR.EL.BIEN.DE.TODOS","NUEVA.ALIANZA","ALTERNATIVA")]
partidos <- c("PAN","APM","PBT","PANAL","ASDC")
names(data06) <- c("ID_ESTADO","DISTRITO", partidos)
data06$ID_ESTADO <- as.numeric(as.character(factor(data06$ID_ESTADO, labels=c(1:4, 7, 8, 5, 6, 9:32))))

# Ordenar data
data06 <- data06[order(data06$ID_ESTADO, data06$DISTRITO),]

## -----------------
## Distritacion 2003
## -----------------
# COMPUTOS DISTRITALES 2006 - por seccion
computo <- read.table("Computos2006-Diputado.txt", head=TRUE, sep="|")
computo <- computo[computo$TIPO_CANDIDATURA==5,]
computo <- aggregate(computo[,partidos], 
                     by=computo[c("ID_ESTADO","DISTRITO","SECCION","MUNICIPIO")], 
                     sum, na.rm=TRUE)

# Reseccionamiento
resecc <- read.table("RESECCIONAMIENTO_2005.txt", header=TRUE, sep="\t")
resecc <- resecc[complete.cases(resecc),]
data03 <- computo
data03$SECCION[match(paste(resecc$cve_ent,resecc$seccion06,sep=","),
                     paste(data03$ID_ESTADO,data03$SECCION,sep=","),)] <- resecc$seccion03

# Distrito 03
tabla <- read.table("tabla_equivalencias_seccionales.txt", header=TRUE, sep="\t", fill=TRUE)
tabla <- tabla[,c("cve_ent","seccion","Distrito_PEF2003")]
data03 <- merge(data03, tabla, 
                by.x=c("ID_ESTADO","SECCION"),
                by.y=c("cve_ent","seccion"),
                all.x=TRUE)

# Secciones sin distrito asignado por cambios en limites municipales
data03[is.na(data03$Distrito_PEF2003), c("ID_ESTADO","SECCION","DISTRITO")]

## Agregar por distrito
data03 <- aggregate(data03[,partidos], 
                    by=data03[c("ID_ESTADO","Distrito_PEF2003")], 
                    sum, na.rm=TRUE)
# Ordenar data
data03 <- data03[order(data03$ID_ESTADO, data03$Distrito_PEF2003),]

## -----------------
## Compara ganador
## -----------------
ganador03 <- apply(data03[,partidos], 1, function(x) names(which.max(x)))
ganador06 <- apply(data06[,partidos], 1, function(x) names(which.max(x)))

# Distritos ganados
table(ganador03)
table(ganador06)

# Por estado
table(data03$ID_ESTADO, ganador03)
table(data06$ID_ESTADO, ganador06)

# Diferencias por estado
diff <- table(data06$ID_ESTADO, ganador06)-table(data03$ID_ESTADO, ganador03)
print(diff)

# Diferencias netas
apply(diff, 2, sum)

## ---------------------------
## MAPAS DISTRITALES
## ---------------------------
require("maptools")
require(gpclib)
gpclibPermit()

plot.distrito <- function(data, shapefile, main) {
  # Ganador
  ganador <- factor(apply(data[,partidos], 1, function(x) names(which.max(x))),
                    levels=c("PAN", "APM", "PBT"))
  table <- table(ganador)
  legend <- sapply(1:3, function(x) paste(names(table[x]), " (", table[x], ")", sep=""))
  # Colores
  color <- NULL
  color[ganador=="PAN"] <- "royalblue3"
  color[ganador=="APM"] <- "firebrick"
  color[ganador=="PBT"] <- "gold3"
  ## Read shapefiles
  shp <- readShapePoly(shapefile, IDvar = "ID", force_ring = TRUE)
  entidad <- readShapeLines("ENTIDAD")
  ## Ordenar shape
  shp <- shp[order(shp$ENTIDAD, shp$DISTRITO),]
  ## Plot
  plot(shp, lty="blank", col=color)
  plot(entidad, lwd=0.2, col="white", add=TRUE)
  #title(main=main, cex.main=1.5)
  legend("right", legend, title="Distritos:", pch=15, col=c("royalblue3","firebrick", "gold3"), box.lwd=0, cex=1.3)
  # DF y EdoMex
  par(fig=c(0.6,1,0.6,1), new=TRUE, mar=c(0,0,0,0))
  plot(shp[data$ID_ESTADO %in% c(9, 15),], col=color[data$ID_ESTADO %in% c(9, 15)], lty="blank")
  plot(entidad[entidad$ENT %in% c(9, 15),], col="white", add=TRUE)
}

## Plot maps
#pdf("map_boundaries96.pdf", 5, 4)
png("map_boundaries96.png", width = 1000, height = 800, units = "px")
par(mar=c(1,1,1,1))
plot.distrito(data03, "DISTRITO_03", "Límites distritales 1996")
dev.off()

#pdf("map_boundaries05.pdf", 5, 4)
png("map_boundaries05.png", width = 1000, height = 800, units = "px")
par(mar=c(1,1,1,1))
plot.distrito(data06, "DISTRITO_06", "Límites distritales 2005")
dev.off()